package com.hbnu.common.service;

import com.hbnu.common.response.ServiceResponse;
import com.hbnu.common.entity.CheckInItem;

import java.util.List;

/**
 * 主业务服务（Service）接口。
 * 定义了用户登录后可进行的核心业务操作契约，包括：
 * <ul>
 *     <li>个人密码修改</li>
 *     <li>打卡项的创建、查询、更新与删除</li>
 *     <li>每日打卡操作</li>
 * </ul>
 */

public interface MainService {

    /**
     * 处理当前登录用户修改密码的请求。
     *
     * @param newPassword 用户希望设置的新密码。
     * @return 封装操作结果的 {@link ServiceResponse}。
     */
    ServiceResponse<Void> handleUpdatePassword(String newPassword);

    /**
     * 为当前登录用户创建一个新的打卡项。
     *
     * @param itemName 新打卡项的名称。
     * @return 封装操作结果的 {@link ServiceResponse}。
     */
    ServiceResponse<Void> handleAddCheckInItem(String itemName);

    /**
     * 查询并返回当前登录用户的所有打卡项列表。
     *
     * @return 封装查询结果的 {@link ServiceResponse}，成功时数据为打卡项列表。
     */
    ServiceResponse<List<CheckInItem>> handleGetAllCheckInItems();

    /**
     * 处理当前登录用户对指定打卡项的当日打卡操作。
     *
     * @param itemId 需要打卡的打卡项ID。
     * @return 封装操作结果的 {@link ServiceResponse}。
     */
    ServiceResponse<Void> handleCheckIn(int itemId);

    /**
     * 更新当前登录用户名下指定打卡项的名称。
     *
     * @param itemId  要更新的打卡项ID。
     * @param newName 打卡项的新名称。
     * @return 封装操作结果的 {@link ServiceResponse}。
     */
    ServiceResponse<Void> handleUpdateCheckInItem(int itemId, String newName);

    /**
     * 删除当前登录用户名下的指定打卡项。
     *
     * @param itemId 要删除的打卡项ID。
     * @return 封装操作结果的 {@link ServiceResponse}。
     */
    ServiceResponse<Void> handleDeleteCheckInItem(int itemId);

    /**
     * 更新当前登录用户昵称。
     *
     * @param nickname 新的昵称。
     * @return 封装操作结果的 {@link ServiceResponse}。
     */
    ServiceResponse<Void> handleUpdateNickname(String nickname);
}
